Docker поддерживает несколько типов сетей:
bridge
host
none
overlay
macvlan
ipvlan
docker0
docker run -d --name web python:3.9 python app.py
web
-p
docker run --rm alpine ping -c 3 web # не работает — DNS недоступен
docker network create my-network docker run -d --name db --network my-network redis docker run -d --name app --network my-network my-app
docker exec -it app ping db # работает — db резолвится
docker run -d --name web --network my-network \ --network-alias api.myapp.local nginx
docker run --network host nginx
docker run --network none alpine ip addr show # вывод: только lo (loopback)
docker swarm init docker network create -d overlay my-overlay
docker network create -d macvlan \ --subnet=192.168.1.0/24 \ --gateway=192.168.1.1 \ -o parent=eth0 macnet
Требует правильной настройки интерфейса хоста
docker network ls
docker network create
docker network rm
docker network inspect
docker network connect
docker network disconnect
# Создаём сеть docker network create backend # Запускаем БД в сети docker run -d --name redis --network backend redis:alpine # Запускаем приложение docker run -d --name api --network backend my-api # API может обращаться к redis по имени
# внутри api-контейнера import redis r = redis.Redis(host='redis', port=6379)
Контейнер может быть подключён к нескольким сетям:
docker run -d --name worker my-worker # Подключаем к разным сетям docker network connect backend worker docker network connect monitoring worker
--publish
docker run -d --name web --network my-network -p 8080:80 nginx
my-network
web:80
В docker-compose.yml сети задаются явно:
docker-compose.yml
version: '3.8' services: web: image: nginx networks: - frontend api: image: my-api networks: - backend db: image: postgres networks: - backend networks: frontend: backend:
networks: public: driver: bridge internal: driver: bridge internal: true # нет доступа в интернет
public
internal
api
db
internal: true
iptables
firewalld
docker network create -d overlay \ --opt encrypted \ secure-net
docker network